#!/bin/bash
#
# Comando "MoverT"
#
# Funcionalidad:
# Mover archivos de un directorio a otro contemplando posibles archivos duplicados
#
# Parámetros
# Parámetro 1 (obligatorio): origen (directorioCompleto/archivo)
# Parámetro 2 (obligatorio): destino (directorio)
# Parámetro 3 (opcional): comando que lo invoca (Para generar log)
#
# Códigos de error:
#	1 - Cantidad de parámetros inválida
#	2 - Origen inexistente
#	3 - El directorio de destino no existe
#
################################################
# Función que genera el log si corresponde
# Parámetros
# Parámetro 1: Proceso que invoca
# Parámetro 2: Tipo de mensaje
# Parámetro 3: Mensaje
function loguear() {
	./LoguearT.sh "$1" "$2" "$3";
}
################################################

# Verifico que la cantidad de parámetros sea válida
if [ $# -lt 2 -o $# -gt 3 ]; then
	echo "Cantidad de parámetros inválida"
	exit 1
fi

# Verifico si hay que loguear
if [ $# -eq 3 ]; then
	logFlag=true  # Creo el flag de log
	comandInv="$3"  # Extraigo el comando de los parámetros
fi

# Verifico que exista archivo de origen 
if [ ! -f "$1" ]; then
	${logFlag:+loguear $comandInv E 2}
	exit 2
# Verifico que exista el directorio de destino
elif [ ! -d "$2" ]; then
	${logFlag:+loguear $comandInv E 9}
	exit 3
# Verifico que el origen y el destino sean distintos
elif [ "$1" == "$2" ]; then
	${logFlag:+loguear $comandInv "I" "El origen es igual al destino"}
	exit 0
fi

# Remuevo la barra final del directorio de destino si la tiene
dirDestino=$(echo "$2" | sed "s;'/$';;" )
archDestino=${1##*/}

# Verifico si en destino existe un archivo con el mismo nombre
if [ -f "$dirDestino/$archDestino" ]; then
	# Calculo la posicion del número de secuencia en el nombre del archivo
	secPos=`expr ${#archDestino} + 2`
	# Obtengo el último número de secuencia si hay alguno
	secNum=$(ls -B -1 $dirDestino | grep "^$archDestino.[0-9]\{1,17\}$" | cut -c $secPos- | sort -n -r | head -n 1)
	# Inicialiazo o incremento el número de secuencia
	if [ -z "$secNum" ]; then
		secNum=0
	else
		secNum=`expr $secNum + 1`
	fi
	# Realizo el movimiento y logueo si corresponde
	destinoFinal="$dirDestino/$archDestino.$secNum"
	mv "$1" "$destinoFinal"
	${logFlag:+loguear $comandInv "A" "Archivo $1 movido exitosamente a $destinoFinal donde ya existía"}

else
	# Si no existe el archivo en destino, lo muevo y logueo
	mv "$1" "$2"
	${logFlag:+loguear $comandInv "I" "Archivo $1 movido exitosamente a $2"}
fi
exit 0
